<?php

require_once 'app/funciones.php';
require_once 'app/Model.php';

// Incluye automáticamente los controladores que sean necesarios
function __autoload($nombre_clase) {
    require_once 'app/' . $nombre_clase . '.php';
}

session_start();

// enrutamiento. Selecciona el controlador y la acción a ejecutar
$map = array(
    'inicio' => array('controller' => 'controlador_administradores', 'action' => 'inicio', 'privada' => false),
    'login' => array('controller' => 'controlador_administradores', 'action' => 'login', 'privada' => false),
    'home' => array('controller' => 'controlador_administradores', 'action' => 'home', 'privada' => true),
    'usuarios' => array('controller' => 'controlador_usuarios', 'action' => 'listado_usuarios', 'privada' => true),
    'registro_usuario' => array('controller' => 'controlador_usuarios', 'action' => 'registrar', 'privada' => true),
    'modificar_usuario' => array('controller' => 'controlador_usuarios', 'action' => 'editar', 'privada' => true),
    'ver_usuario' => array('controller' => 'controlador_usuarios', 'action' => 'ver_usuario', 'privada' => true),
    'bloquear_usuario' => array('controller' => 'controlador_usuarios', 'action' => 'bloquear', 'privada' => true),
    'desbloquear_usuario' => array('controller' => 'controlador_usuarios', 'action' => 'desbloquear', 'privada' => true),
    'recargar_puntos' => array('controller' => 'controlador_usuarios', 'action' => 'recargar_puntos', 'privada' => true),
    'competiciones' => array('controller' => 'controlador_competiciones', 'action' => 'ver_competiciones', 'privada' => true),
    'competicion' => array('controller' => 'controlador_jornadas', 'action' => 'ver_jornadas', 'privada' => true),
    'registro_competicion' => array('controller' => 'controlador_competiciones', 'action' => 'registrar', 'privada' => true),
    'modificar_competicion' => array('controller' => 'controlador_competiciones', 'action' => 'editar', 'privada' => true),
    'ver_competicion' => array('controller' => 'controlador_competiciones', 'action' => 'ver_competicion', 'privada' => true),
    'equipos' => array('controller' => 'controlador_equipos', 'action' => 'listado_equipos', 'privada' => true),
    'registro_equipo' => array('controller' => 'controlador_equipos', 'action' => 'registro_equipo', 'privada' => true),
    'ver_equipo' => array('controller' => 'controlador_equipos', 'action' => 'ver_equipo', 'privada' => true),
    'registro_equipo_competicion' => array('controller' => 'controlador_equipos', 'action' => 'registro_equipo_competicion', 'privada' => true),
    'modificar_equipo' => array('controller' => 'controlador_equipos', 'action' => 'editar', 'privada' => true),
    'partidos' => array('controller' => 'controlador_partidos', 'action' => 'listado_partidos', 'privada' => true),
    'ver_partido' => array('controller' => 'controlador_partidos', 'action' => 'ver_partido', 'privada' => true),
    'jornada' => array('controller' => 'controlador_porras', 'action' => 'listado_porras', 'privada' => true),
    'porras' => array('controller' => 'controlador_porras', 'action' => 'ver_porras', 'privada' => true),
    'activar_porra' => array('controller' => 'controlador_porras', 'action' => 'activar', 'privada' => true),
    'desactivar_porra' => array('controller' => 'controlador_porras', 'action' => 'desactivar', 'privada' => true),
    'registro_jornada' => array('controller' => 'controlador_jornadas', 'action' => 'registro_jornada', 'privada' => true),
    'porra' => array('controller' => 'controlador_porras', 'action' => 'ver_porra', 'privada' => true),
    'registro_porra' => array('controller' => 'controlador_porras', 'action' => 'regristrar', 'privada' => true),
    'modificar_porra' => array('controller' => 'controlador_porras', 'action' => 'editar', 'privada' => true),
    'comprobar_porra' => array('controller' => 'controlador_porras', 'action' => 'comprobarPorra', 'privada' => true),
    'repartir_bote' => array('controller' => 'controlador_porras', 'action' => 'repartirBote', 'privada' => true),
    'regalos' => array('controller' => 'controlador_regalos', 'action' => 'ver_regalos', 'privada' => true),
    'modificar_regalo' => array('controller' => 'controlador_regalos', 'action' => 'editar', 'privada' => true),
    'registro_regalo' => array('controller' => 'controlador_regalos', 'action' => 'registro_regalo', 'privada' => true),
    'ver_regalo' => array('controller' => 'controlador_regalos', 'action' => 'ver_regalo', 'privada' => true),
    'eliminar_regalo' => array('controller' => 'controlador_regalos', 'action' => 'eliminar_regalo', 'privada' => true),
    'premios' => array('controller' => 'controlador_premios', 'action' => 'ver_premios', 'privada' => true),
    'modificar_premio' => array('controller' => 'controlador_premios', 'action' => 'editar', 'privada' => true),
    'logout' => array('controller' => 'controlador_administradores', 'action' => 'logout', 'privada' => true)
);

//Comprobamos si hay alguna accion que ejecutar, sino vamos a inicio
if (isset($_GET['action'])) {
    //Comprobamos que la acción existe en el mapa del enrutamiento, sino mostramos error 404
    if (isset($map[$_GET['action']])) {
        $action = $_GET['action'];
    } else {
        header('Status: 404 Not Found');
        echo '<html><body><h1>Error 404: No existe la ruta " ' . $_GET['action'] . ' ". </h1></body></html>';
        exit;
    }
} else {
    $action = 'inicio';
}

// Comprobamos si el usuario esta logeado y si la página es privada
if ($map[$action]['privada']) {
    //Si no existe la variable de sesión y no estamos ya en inicio redirigimos a inicio
    if (!isset($_SESSION['adminbetporra_usuario']) && $action != 'inicio') {
        header('location:inicio');
        die();
    }

}

//Si estamos en inicio y ya estamos logueados (existe la sesión) redirigimos a listar contactos
if ($action == 'inicio' && isset($_SESSION['adminbetporra_usuario'])) {
    header('location:home');
}

// La variable controlador contiene la clase del controlador a ejecutar y el método de dicha clase.
$controlador = $map [$action];

// Guardamos en variables el nombre de la clase controladora y del método que queremos ejecutar dentro de dicha clase
$clase_controlador = $controlador ['controller'];
$metodo = $controlador ['action'];

// Creamos un objeto de la clase controladora y ejecutamos el método indicado en el action
$obj_controlador = new $clase_controlador ();
$obj_controlador->$metodo();
?>
